import { loginAPI, userInfoAPI } from '@/api/user'
import { Toast } from 'vant'

import router from '@/router'
export default {
  namespaced: true,
  // 模块化里的state必须是一个函数
  // 函数里return一个对象，然后我们把声明的数据写到return这个对象里
  state () {
    return {
      // 保存双token的对象
      tokenObj: {},
      userInfo: {}
    }
  },

  mutations: {
    // 声明方法
    setToken (state, obj) {
      state.tokenObj = obj
    },

    // 修改userInfo的方法
    setUserInfo (state, obj) {
      state.userInfo = obj
    }
  },
  actions: {
    async login (ctx, obj) {
      try {
      // 如果这个事件触发了，就代表整个表单都校验通过
      // 可以直接发请求
        const res = await loginAPI(obj)
        // 把token存到vuex里
        ctx.commit('setToken', res.data)
        Toast.success('登录成功')
        // 因为这里是js文件没有$route所以得用原始的方法获取参数
        const index = location.href.indexOf('=')
        if (index !== -1) {
          // 有=号就代表有参数,从=号下一位开始截，截取到最后
          const name = location.href.substring(index + 1)
          router.push({
            name
          })
        } else {
          // 没有=，就代表没有参数,因为我们有重定向到首页
          router.push('/')
        }

        // 要进行跳转，先判断有没有参数
      } catch {
        Toast.success('登录失败')
      }
    },

    async reqUserInfo (ctx) {
      // 判断以下当前有没有数据，有就不发了，没有才发请求
      if (!ctx.state.userInfo.name) {
        // 发请求
        const res = await userInfoAPI()
        // 存到state里-调用mutations的方法用commit
        ctx.commit('setUserInfo', res.data)
      }
    },

    // 退出不光是要删token
    // 而是删掉跟这个用户有关的一切信息
    logout (ctx) {
      // 1. 删掉token
      ctx.commit('setToken', {})
      // 2. 删除用户信息
      ctx.commit('setUserInfo', {})
      // 3. 打回登录页
      router.push('/login')
    }
  }
}
